package org.example.gateway;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.codec.binary.Base64;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;

public class Demo {

    public static void main(String[] args) {

    }

    /**
     * 解密jwt
     */
    private static Claims parseJWT(String token) {
        // 签名秘钥，和生成的签名的秘钥一模一样
        SecretKey key = generalKey();
        System.out.println("parseJWT: 生成密钥:" + key);
        return Jwts.parser().setSigningKey("randomString").parseClaimsJws(token).getBody();
    }

    /**
     * 由字符串生成加密key
     */
    private static SecretKey generalKey() {
        // 本地的密码解码
        byte[] encodedKey = Base64.decodeBase64("randomString");
        // 根据给定的字节数组使用AES加密算法构造一个密钥
        return new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
    }

    private static String generateToken(String userCode) {
        SecretKey key = generalKey();
        System.out.println("generateToken: 生成密钥:" + key);
        return Jwts.builder()
                .setSubject(userCode)
                // 设置过期时间为1天，token 有效期24小时
                .setExpiration(getNextDay())
                // SECRET_KEY 自定义的密钥
                .signWith(SignatureAlgorithm.HS256, "randomString")
                .compact();
    }

    private static Date getNextDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        return calendar.getTime();
    }
}
